//package com.example.demo.service;
//
//import cn.hutool.http.HttpUtil;
//import com.alibaba.fastjson.JSONArray;
//import com.alibaba.fastjson.JSONObject;
//import org.springframework.stereotype.Service;
//
//import java.util.List;
//import java.util.stream.Collectors;
//118972840 id

//@Service
//public class LLMService {
//    private static final String API_URL = "https://api.deepseek.com/v1/chat/completions";
//    private static final String API_KEY = "sk-faeca398d5874c83ad948960d29b82e7";
//
//    public List<String> extractKeywords(String prompt) {
//        // 构造请求体
//        JSONObject requestBody = new JSONObject();
//        requestBody.put("model", "deepseek-chat");
//        requestBody.put("temperature", 0.7);
//        requestBody.put("max_tokens", 200);
//
//        JSONArray messages = new JSONArray();
//
//        JSONObject systemMessage = new JSONObject();
//        systemMessage.put("role", "system");
//        systemMessage.put("content", "你是百科全书，并且请用中文回答。你的任务是根据用户描述，联系到相关的关键词、猜出用户提到的网络资源名并给出分类。");
//
//        JSONObject userMessage = new JSONObject();
//        userMessage.put("role", "user");
//        userMessage.put("content", prompt);
//
//        messages.add(systemMessage);
//        messages.add(userMessage);
//
//        requestBody.put("messages", messages);
//
//        // 发送请求
//        String response = HttpUtil.createPost(API_URL)
//                .header("Authorization", "Bearer " + API_KEY)
//                .header("Content-Type", "application/json")
//                .body(requestBody.toJSONString())
//                .execute()
//                .body();
//
//        System.out.println("model answer: " + response);
//
//        // 解析返回的文本内容
//        return parseKeywords(response);
//    }
//
//    private List<String> parseKeywords(String responseBody) {
//        try {
//            JSONObject jsonResponse = JSONObject.parseObject(responseBody);
//            String content = jsonResponse.getJSONArray("choices")
//                    .getJSONObject(0)
//                    .getJSONObject("message")
//                    .getString("content");
//
//            // 假设模型返回内容格式为：keywords: xxx, xxx
//            String keywordsPart = content.split("keywords:")[1].split("\n")[0];
//            return List.of(keywordsPart.split(","))
//                    .stream()
//                    .map(String::trim)
//                    .collect(Collectors.toList());
//        } catch (Exception e) {
//            System.err.println("Error parsing keywords: " + e.getMessage());
//            return List.of();
//        }
//    }
//}
package com.example.demo.service;

import cn.hutool.http.HttpUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;

@Service
public class LLMService {
    private static String ACCESS_TOKEN; // 需替换为实际Access Token
    private static final String API_BASE_URL = "https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/completions";
    private  static final String key="zzwkPawor0WEsQ1AGJJ04qVY";
    private  static final String secret="QndjrH2bjqmHk3xPbbvqopZ1jj0SeHNC";

    public List<String> extractKeywords(String prompt) {
        // 构造文心一言API请求体
        // 获取并校验Access Token
        ACCESS_TOKEN = getAccessToken();
        if (ACCESS_TOKEN == null) {
            System.err.println("Access Token获取失败");
            return List.of();
        }
        JSONObject requestBody = new JSONObject();
        JSONArray messages = new JSONArray();

        // 系统消息（文心一言部分模型不支持system角色，可合并到user消息）
        JSONObject userMessage1 = new JSONObject();
        JSONObject userMessage2 = new JSONObject();

        userMessage1.put("role", "user");
        userMessage1.put("content", "你是百科全书，请用中文回答。根据用户描述提取并尽可能多的联想相关关键词、网络资源名并分类。用户描述：" + prompt);
        messages.add(userMessage1);

        userMessage2.put("role", "user");
        userMessage2.put("content", "请严格按以下格式用中文顿号分隔关键词，不要解释：关键词：xxx、yyy、zzz。用户描述：" + prompt);
        messages.add(userMessage2);

        requestBody.put("messages", messages);
        requestBody.put("temperature", 0.7);
        requestBody.put("max_tokens", 200);

        // 发送请求
        String apiUrl = API_BASE_URL + "?access_token=" + ACCESS_TOKEN;
        String response = HttpUtil.createPost(apiUrl)
                .header("Content-Type", "application/json")
                .body(requestBody.toJSONString())
                .execute()
                .body();

        System.out.println("文心一言响应: " + response);

        return parseErnieResponse(response);
    }

    private List<String> parseErnieResponse(String responseBody) {
        try {
            JSONObject jsonResponse = JSONObject.parseObject(responseBody);

            // 错误响应处理
            if (jsonResponse.containsKey("error_code")) {
                System.err.println("API错误: code=" + jsonResponse.getIntValue("error_code")
                        + ", msg=" + jsonResponse.getString("error_msg"));
                return List.of();
            }

            String content = jsonResponse.getString("result");
            if (content == null || content.isEmpty()) {
                return List.of();
            }

            // 增强正则表达式匹配逻辑
            // 新正则表达式（支持多级标题和中文标点）
            Pattern pattern = Pattern.compile(
                    "(?i)(\\*\\*关键词\\*\\*|关键词)[:：\\s]*([^\\*]+?)(?=\\n\\*\\*|###|$)",
                    Pattern.DOTALL
            );
            Matcher matcher = pattern.matcher(content);
            if (matcher.find()) {
                String keywordSection = matcher.group(2).trim();
                // 使用中文顿号分割，兼容全角逗号
                return Arrays.stream(keywordSection.split("[、，,]"))
                        .map(String::trim)
                        .filter(s -> !s.isEmpty())
                        .map(s -> s.replaceAll("[（）()【】“”]", "")) // 清除中文符号
                        .filter(s -> s.matches("^[\\w\\u4e00-\\u9fa5]+$")) // 仅保留中文/英文/数字
                        .collect(Collectors.toList());
            }

            System.err.println("未找到关键词段落");
            return List.of();
        } catch (Exception e) {
            System.err.println("解析异常: " + e.getMessage());
            return List.of();
        }
    }

    // 获取Access Token的方法（需提前调用）

    private static String getAccessToken() {
        String authUrl = "https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id="+ key +"&client_secret="+secret;
        String response = HttpUtil.get(authUrl);
        return JSONObject.parseObject(response).getString("access_token");
    }

}
